package gdr.graphics;

import gdr.map.*;
import com.golden.gamedev.Game;

public class CoordinateCalculator
{	public static final int UNIT_WIDTH = 40;
	public static final int UNIT_HEIGHT = 40;
	protected double zoom;
	protected Position center;
	protected int correzioneX;
	protected int correzioneY;
	protected Game game;
	
	public CoordinateCalculator(){
		zoom = 1;
		center = new Position(0,0,0);
		correzioneX=0;
		correzioneY=0;
	}
	/**
	 * calcola la coordinata x su schermo in cui la posizione andra' stampata.
	 * @param pos
	 * @return
	 */
	public int getX(Position pos){
		int dist = pos.getX()-center.getX();
		int value = dist*UNIT_WIDTH + game.getWidth()/2 + correzioneX;
		return (int)Math.round(zoom*value);
	}
	/**
	 * calcola la coordinata y su schermo in cui la posizione andra' stampata.
	 * @param pos
	 * @return
	 */
	public int getY(Position pos){
		int dist = pos.getY()-center.getY();
		int value = dist*UNIT_HEIGHT + game.getHeight()/2 + correzioneY;
		return (int)Math.round(zoom*value);
	}
	/**
	 * ridimensiona un valore in base allo zoom
	 * @param value
	 * @return
	 */
	public int resize(int value){
		return (int)Math.round(zoom*value);
	}
	
	
	public double getZoom() {
		return zoom;
	}
	public void setZoom(double zoom) {
		this.zoom = zoom;
	}
	public Position getCenter() {
		return center;
	}
	public void setCenter(Position center) {
		this.center = center;
	}
	public int getCorrezioneX() {
		return correzioneX;
	}
	public void setCorrezioneX(int correzioneX) {
		this.correzioneX = correzioneX;
	}
	public int getCorrezioneY() {
		return correzioneY;
	}
	public void setCorrezioneY(int correzioneY) {
		this.correzioneY = correzioneY;
	}
	public Game getGame() {
		return game;
	}
	public void setGame(Game game) {
		this.game = game;
	}
}
